package top.jiangqiang.qyblog.core.service;

import top.jiangqiang.qyblog.common.base.query.PageResult;
import top.jiangqiang.qyblog.common.base.response.Result;
import top.jiangqiang.qyblog.common.config.GlobalProperties;
import top.jiangqiang.qyblog.core.base.service.BaseService;
import top.jiangqiang.qyblog.core.domain.dto.*;
import top.jiangqiang.qyblog.core.domain.entity.AdminUser;
import top.jiangqiang.qyblog.core.domain.vo.AdminUserVo;

import java.util.Set;

/**
 * @author JiangQiang
 * @date 2019/3/29 21:6
 */
public interface IAdminUserService extends BaseService<AdminUser> {
    /**
     * 根据用户名查询用户信息
     *
     * @param username 用户名
     * @return
     */
    AdminUser findByUsername(String username);

    Result<String> login(AdminUserLoginDto adminUserLoginDto);

    /**
     * 查询当前登录用户信息
     *
     * @return
     */
    Result<AdminUserVo> getUserInfo();

    /**
     * 用户注册
     *
     * @param adminUserRegisterDto
     * @return
     */
    Result<String> registerUser(AdminUserRegisterDto adminUserRegisterDto);

    /**
     * 修改当前用户信息
     *
     * @param adminUserUpdateInfoDto
     * @return
     */
    Result<AdminUserVo> updateUserInfo(AdminUserUpdateInfoDto adminUserUpdateInfoDto);

    /**
     * 修改当前登录用户密码
     *
     * @param adminUserUpdatePasswordDto
     * @return
     */
    Result<String> updateUserPassword(AdminUserUpdatePasswordDto adminUserUpdatePasswordDto);

    /**
     * 校验用户名是否可用
     *
     * @param username username
     * @return
     */
    Result<Boolean> validateUsername(String username);

    /**
     * 系统首次启动时，自动初始化管理员账户
     *
     * @param userConfigs
     */
    void initUsers(Set<GlobalProperties.UserConfig> userConfigs);

    Result<PageResult<AdminUserVo>> findByCondition(AdminUserQueryDto adminUserQueryDto);

    Result<String> logout();
}
